module J_mod(
	rst,
	
	J_en_i,
	J_data_i,
	J_data1_i,
	J_addr_i,
	J_addrp_i,
	J_how_i,

	J_mux_o,
	J_PC_o
);
input rst;
	
input J_en_i;
input [31:0] J_data_i;
input [31:0] J_data1_i;
input [31:0] J_addr_i;
input [31:0] J_addrp_i;
input [2:0] J_how_i;

output J_mux_o;
output [31:0] J_PC_o;

wire signed [31:0] J_data_i;
wire signed [31:0] J_data1_i;
wire signed [31:0] J_addr_i;
wire signed [31:0] J_addrp_i;

reg J_mux_o;
reg [31:0] J_PC_o;

always @ ( * ) begin
	if (rst == 1'b1) begin
		J_mux_o = 1'b0;
		J_PC_o = 32'b0;
	end else if (J_en_i == 1'b1) begin
		if (J_how_i == 0) begin
			if (J_data_i == J_data1_i) begin
				J_mux_o = 1'b1;
				J_PC_o = J_addr_i + J_addrp_i;
			end else begin
				J_mux_o = 1'b0;
				J_PC_o = 32'b0;
			end
		end else if (J_how_i == 1) begin
			if (J_data_i != J_data1_i) begin
				J_mux_o = 1'b1;
				J_PC_o = J_addr_i + J_addrp_i;
			end else begin
				J_mux_o = 1'b0;
				J_PC_o = 32'b0;
			end
		end else if (J_how_i == 2) begin
			if (J_data_i < J_data1_i) begin
				J_mux_o = 1'b1;
				J_PC_o = J_addr_i + J_addrp_i;
			end else begin
				J_mux_o = 1'b0;
				J_PC_o = 32'b0;
			end
		end else if (J_how_i == 3) begin
			if (J_data_i >= J_data1_i) begin
				J_mux_o = 1'b1;
				J_PC_o = J_addr_i + J_addrp_i;
			end else begin
				J_mux_o = 1'b0;
				J_PC_o = 32'b0;
			end
		end else if (J_how_i == 4) begin
			if ($unsigned(J_data_i) < $unsigned(J_data1_i)) begin
				J_mux_o = 1'b1;
				J_PC_o = J_addr_i + J_addrp_i;
			end else begin
				J_mux_o = 1'b0;
				J_PC_o = 32'b0;
			end
		end else if (J_how_i == 5) begin
			if ($unsigned(J_data_i) >= $unsigned(J_data1_i)) begin
				J_mux_o = 1'b1;
				J_PC_o = J_addr_i + J_addrp_i;
			end else begin
				J_mux_o = 1'b0;
				J_PC_o = 32'b0;
			end
		end else if (J_how_i == 6) begin
			J_mux_o = 1'b1;
			J_PC_o = J_addr_i + J_addrp_i;
		end else if (J_how_i == 7) begin
			J_mux_o = 1'b1;
			J_PC_o = J_addr_i + J_addrp_i;
		end else begin
			J_mux_o = 1'b0;
			J_PC_o = 32'b0;
		end
	end else begin
		J_mux_o = 1'b0;
		J_PC_o = 32'b0;
	end	
end
endmodule